$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$


      ___   ___   ___   ___  ____
      /   \ /   \ /   \ /   \I_  /
     I  l  I  l  I  l  I  ___I  /
     I  l  I  l  I  l  I     I / _
      \____I  __/_\____I\___/l/___I
           I I  l  I    \
   member  I I  l  I     I  UnderPL
     of    I_I     I  l  I    2001
              \____I__l__I

     >>>> apacz@under-pl.org <<<<



$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

cel     : CrackMe 3.0 by Wily
data    : listopad 2001
napisal : apacz^UnderPL
co      : tut

$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$#

HOWGH!

Witam ponownie w kolejnym tutorialu.

CrackMe 3.0 by Wily
#########################
Odpalamy CrackMe 3.0 i widzimy, ze trzeba wpisac serial co czynimy.
Nalezy wpisac 16 znakow, wiec tyle wpisojemy i... oczywiscie nie udalo
nam sie zarejestrowc ~:-( [chyba ze mamy szczescie~;-0]
Na poczatek zaczynamy od naszej ulubionej pulapki na GrtDlgItemTextA.
Odpalamy CrackMe i udalo sie jestesmy w SI - ladujemy w tym miejcsu:

004010F2                 test    eax, eax
004010F4                 jz      short loc_401172
004010F6                 cmp     eax, 10h              <czy 16 znakow?
004010F9                 jnz     short loc_401172      <jesli nie nara
004010FB                 mov     eax, offset unk_403010
00401100                 mov     edi, [eax]            <pierwsz4znaki
00401102                 add     eax, 4            <zwiekszamy eax o 4
00401105                 rol     edi, 4
00401108                 shr     edi, 2
0040110B                 push    edi
0040110C                 xor     edi, 12345678h
00401112                 ror     edi, 3
00401115                 pop     edx
00401116                 xor     edi, edx
00401118                 xor     edi, 8E481BA8h
0040111E                 test    edi, edi
00401120                 jnz     short loc_401172 < jesli nie 0 to nara
00401122                 mov     edi, [eax]       < nastepne4znaki
00401124                 add     eax, 4         <zwiekszamy eax o 4
00401127                 push    edi
00401128                 shr     edi, 3
0040112B                 rol     edi, 4
0040112E                 pop     edx
0040112F                 xor     edi, edx
00401131                 push    edi
00401132                 xor     edi, 0B795A352h
00401138                 test    edi, edi
0040113A                 jnz     short loc_401172 < jesli nie 0 to nara
0040113C                 mov     edx, [eax]       < nastepne4znaki
0040113E                 add     eax, 4         <zwiekszamy eax o 4
00401141                 rol     edx, 5
00401144                 xchg    dl, dh
00401146                 rol     edx, 5
00401149                 shr     edx, 3
0040114C                 push    edx
0040114D                 xor     edx, 1AB83512h
00401153                 test    edx, edx
00401155                 jnz     short loc_401172 <jesli nie 0 to nara
00401157                 mov     edi, [eax]       <ostatnie4znaki
00401159                 pop     edx
0040115A                 xor     edi, edx
0040115C                 rol     edi, 5
0040115F                 xor     edi, edx
00401161                 shl     edi, 4
00401164                 xor     edi, edx
00401166                 xor     edi, 83A58A42h
0040116C                 test    edi, edi
0040116E                 jnz     short loc_401172 <jesli nie 0 nara
00401170                 jmp     short loc_401195 < Dobra Robota~;-)

Z kodu wynika, ze program przeprowadza szereg dzialan na naszym serialu
i w czterech miejscach sprawdza ich poprawnosc.
Ciekawe jak to teraz ugryzc? Wydaje mi sie, ze nie wszystko mozna odwro-
cic, wiec postanowilem napisac malego brute force'a. Podzielilem kod na
cztery czesci z ktorych kazda zaczyna sie pobraniem czterech znakow
seriala, a konczy sie na sprawdzeniu czy zero. Do kazdej czesci 
napiszemy osobny, maly programik generujacy cztery znaki serialu.
Oto zrudelko do pierwszej czesci:

;################################################################
;Brute Force do CrackMe 3.0 by Wily part I
;Szkielet do bf zostal oparty na zrodelkach barta^xt. Dzieki~;-)
;################################################################
.386
.model flat,stdcall

include \masm32\include\kernel32.inc
include \masm32\include\user32.inc
include \masm32\include\advapi32.inc
include \masm32\include\windows.inc

includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\user32.lib
includelib \masm32\lib\advapi32.lib




.data
            szHex2Hex   db '%04x',0
            szSN        db 8 dup(0)
            


.code
_start:
            int 3
            
            or      ebx,-1

gen_start:
            inc     ebx
            
            push    ebx
            push    offset szHex2Hex
            push    offset szSN
            pop     esi
            mov     [esi],ebx
            add     esp,4*2
            
            sub     eax,eax
            cdq
            
gen_SN:            
            
            mov     eax, esi
            mov     edi, [eax]     
            rol     edi, 4
            shr     edi, 2
            push    edi
            xor     edi, 12345678h
            ror     edi, 3
            pop     edx
            xor     edi, edx
            xor     edi, 8E481BA8h
            test    edi, edi
            jnz     gen_start


  push 0
  call save_file
  db 'out.bin'
  save_file:
  call _lcreat
  xchg eax,ebx

  push 64
  push offset szSN
  push ebx
  call _lwrite

  push ebx
  call _lclose

  push 0
  call ExitWindowsEx


  int 3

            ret



end _start

Wynik pracy programu zapisywany jest w pliku out.bin
Nie bede zamieszczal reszty zrodelek bo mysle, ze kazdy bedzie potrafil
sam takie bf'y zlozyc ~;-)
W wyniku poskladania razem wszystkich kolejnych znakow otrzymalem takie oto rozwiazanie:  win2asm r5lez! [16 znak to spacja]. Oczywiscie to nie
jest jedyne rozwiazanie~;-) win32asm rulez!! Wpisujemy jedno z naszych 
rozwiazan do naszego CrackMe, sprawdzamy i... po robocie~;-)

Do nastepnego tuta 

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Greetz [alfabetycznie]

all Members of UnderPL - UnFFUn
bart                   - za zrodelka
imaginative            - za szkielet kgena
lukep                  - za pomoc w zdobyciu softu gdy zaczynalem
mNich                  - za pierwsz tutory z ktorych sie uczylem
smola                  - za soft
Tepe                   - za caloksztalt 

oraz dla wszystkich ktorzy wiedza, ze to o nich chodzi~;-)

apacz^UnderPL [apacz@under-pl.org]

2001.11.29